package com.jt.service;
//此对象可以作为Feign方式的远程调用异常处理对象
import com.jt.feign.RemoteProviderService;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

/*服务调用超时的容错方案：FallbackFactory
 *定义【FallbackFactory接口的实现类】；泛型为远程调用的接口
 * 前提：必须先在ProviderController类里面执行模拟耗时操作，并抛出异常
 * 其次：在这里才能实现FallbackFactory的导包和重写方法
 */
/**目的：
 * 基于此对象处理【实现RemoteProviderService接口】调用时出现的服务中断,超时等问题
 */

@Component //把接口的实现类交给spring容器进行管理
public class ProviderFallbackFactory implements FallbackFactory<RemoteProviderService> {
     //@Override 重写注解是jdk版本问题；解决方法：选中project structure；
    public RemoteProviderService create(Throwable throwable) {//接收各种服务异常
        return new RemoteProviderService() { //返回匿名内部类的对象的内容
            public String echoMessage(String msg) {
                return "服务正忙，请稍等.....";
            }
        };
    }
}
//@Component
//public class ProviderFallbackFactory
//        implements FallbackFactory<RemoteProviderService> {
//    /**
//     * 此方法会在RemoteProviderService接口服务调用时,出现了异常后执行.
//     * @param throwable 用于接收异常
//     */
//    @Override
//    public RemoteProviderService create(Throwable throwable) {
//
//        return (msg)->{
//            return  "服务维护中,稍等片刻再访问";
//        };
//    }
//}